home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / programming / other / jikes / src / option.h < prev    next >
C/C++ Source or Header  |  1999-05-14  |  3KB  |  158 lines

  1. // $Id: option.h,v 1.6 1999/03/10 19:59:21 shields Exp $
  2. //
  3. // This software is subject to the terms of the IBM Jikes Compiler
  4. // License Agreement available at the following URL:
  5. // http://www.ibm.com/research/jikes.
  6. // Copyright (C) 1996, 1998, International Business Machines Corporation
  7. // and others.  All Rights Reserved.
  8. // You must accept the terms of that agreement to use this software.
  9. //
  10.  
  11. #ifndef option_INCLUDED
  12. #define option_INCLUDED
  13.  
  14. #include "config.h"
  15. #include <stdlib.h>
  16. #include <string.h>
  17. #include <ctype.h>
  18. #include "bool.h"
  19. #include "code.h"
  20. #include "tuple.h"
  21. #ifdef AMIGAOS_FILE_SYSTEM
  22. #include <unistd.h>
  23. #include <sys/param.h>
  24. #endif
  25.  
  26. class ArgumentExpander
  27. {
  28. public:
  29.  
  30.     int argc;
  31.     char **argv;
  32.  
  33.     ArgumentExpander::ArgumentExpander(int, char **);
  34.  
  35.     ArgumentExpander(Tuple<char> &);
  36.  
  37.     ~ArgumentExpander()
  38.     {
  39.         for (int i = 0; i < argc; i++)
  40.             delete [] argv[i];
  41.         delete [] argv;
  42.     }
  43.  
  44.     bool ArgumentExpanded(Tuple<char *> &, char *);
  45. };
  46.  
  47.  
  48. class KeywordMap
  49. {
  50. public:
  51.     wchar_t *name;
  52.     int length,
  53.         key;
  54. };
  55.  
  56.  
  57. class OptionError
  58. {
  59. public:
  60.     int kind;
  61.     wchar_t *name;
  62.  
  63.     OptionError(int kind_, char *str) : kind(kind_)
  64.     {
  65.         int length = strlen(str);
  66.         name = new wchar_t[length + 1];
  67.         for (int i = 0; i < length; i++)
  68.             name[i] = str[i];
  69.         name[length] = U_NULL;
  70.  
  71.         return;
  72.     }
  73.  
  74.     ~OptionError() { delete [] name; }
  75. };
  76.  
  77.  
  78. class Option
  79. {
  80. #ifdef WIN32_FILE_SYSTEM
  81.     char main_disk,
  82.          *current_directory[128];
  83.  
  84. public:
  85.     bool BadMainDisk() { return main_disk == 0; }
  86.  
  87.     bool IsMainDisk(char c) { return c != 0 && current_directory[c] == current_directory[main_disk]; }
  88.  
  89.     void SaveCurrentDirectoryOnDisk(char);
  90.  
  91.     void ResetCurrentDirectoryOnDisk(char d)
  92.     {
  93.         if (d != 0)
  94.         {
  95. assert(current_directory[d]);
  96.             SetCurrentDirectory(current_directory[d]);
  97.         }
  98.     }
  99.     void SetMainCurrentDirectory()
  100.     {
  101.         SetCurrentDirectory(current_directory[main_disk]);
  102.     }
  103.     char *GetMainCurrentDirectory()
  104.     {
  105.         return current_directory[main_disk];
  106.     }
  107. #elif defined(AMIGAOS_FILE_SYSTEM)
  108. public:
  109.     char *GetMainCurrentDirectory()
  110.     {
  111.     static char buf[MAXPATHLEN+1];
  112.     return getcwd(buf, sizeof(buf));
  113.     }
  114. #endif
  115.  
  116. public:
  117.     char *default_path,
  118.          *classpath,
  119.          *directory,
  120.          *makefile_name;
  121.  
  122.     Tuple<KeywordMap> keyword_map;
  123.     Tuple<OptionError *> bad_options;
  124.  
  125.     bool nowrite,
  126.          deprecation,
  127.          O,
  128.          g,
  129.          verbose,
  130.          depend,
  131.          nowarn,
  132.          one_one,
  133.          zero_defect;
  134.     int first_file_index;
  135.  
  136.     bool debug_dump_lex,
  137.          debug_dump_ast,
  138.          debug_dump_class,
  139.          debug_trap_op,
  140.          applet_author,
  141.          incremental,
  142.          makefile,
  143.          bytecode,
  144.          full_check,
  145.          unzip,
  146.          dump_errors,
  147.          errors,
  148.          ascii, // used on EBCDIC systems to AVOID input translation from EBCDIC to ASCII
  149.          comments,
  150.          pedantic;
  151.  
  152.     Option(ArgumentExpander &);
  153.  
  154.     ~Option();
  155. };
  156.  
  157. #endif /* option_INCLUDED */
  158.